/* 
 * File:   pruebas.h
 * Author: jesus
 *
 * Created on 9 de junio de 2010, 16:27
 */
/*
 *
 *
 *

 -----------------------------------------------------------------------------------------------------------------------
#include "Hash.h"

void FicheroDisperso::crear(unsigned &tamTab, unsigned &tamCub){
tamTabla=tamTab;
tamCubeta=tamCub;
//Rellenamos una cubeta con el valor '0' para saber que está vacia
for(unsigned i=0;i<tamCubeta;i++)
Cubeta.datos[i]=0;
//Ahora creamos un fichero con tamFich cubetas vacías.
ofstream f("codigos");
for(unsigned i=0;i<tamTabla;i++)
escribirCubeta(f,Cubeta);

}

bool FicheroDisperso::insertar(unsigned &dato){
unsigned pos=dato%tamTabla; // Calculo la función de
dispersión
fstream f("codigos", ios::in | ios::out);
bool insertado=false;
//Me situo a la cubeta a la que pertenece mi clave
f.seekg(pos*sizeof(TCubeta), ios::beg);
//Leo la cubeta
leerCubeta(f, Cubeta);
//Intento insertarla
for(unsigned i=0;i<tamCubeta;i++){
if(Cubeta.datos[i]==0){
Cubeta.datos[i]=dato;
insertado=true;
}
}
//Me situo otra vez en la posición correcta y escribo la
cubeta en el fichero
f.seekg(pos*sizeof(TCubeta), ios::beg);
escribirCubeta(f,Cubeta);
f.close();
return insertado;
}

bool FicheroDisperso::borrar(unsigned &clave){
unsigned clavedato,pos=clave%tamTabla;
fstream f("codigos", ios::in | ios::out);
bool borrado=false;
//Me situo a la cubeta a la que pertenece mi clave
f.seekg(pos*sizeof(TCubeta), ios::beg);
//Leo la cubeta
leerCubeta(f, Cubeta);
//Busco si se encuentra para borrarla con '0'
for(unsigned i=0;i<tamCubeta;i++){
clavedato=Cubeta.datos[i]%tamTabla;
if(Cubeta.datos[i]==clavedato){
Cubeta.datos[i]=0;
borrado=true;
}
}
//Me situo otra vez en la posición correcta y escribo la
cubeta en el fichero
f.seekg(pos*sizeof(TCubeta), ios::beg);
escribirCubeta(f,Cubeta);
f.close();
return borrado;
}


bool FicheroDisperso::buscar(unsigned &clave, unsigned
&dato){
unsigned clavedato,pos=clave%tamTabla;
fstream f("codigos", ios::in | ios::out);
bool encontrado=false;
//Me situo a la cubeta a la que pertenece mi clave
f.seekg(pos*sizeof(TCubeta), ios::beg);
//Leo la cubeta
leerCubeta(f, Cubeta);
//Busco si la clave se encuentra dentro de la cubeta
for(unsigned i=0;i<tamCubeta;i++){
clavedato=Cubeta.datos[i]%tamTabla;
if(Cubeta.datos[i]==clavedato){
//Escribo en dato, el dato que tiene la cubeta
dato=Cubeta.datos[i];
encontrado=true;
}
}
f.close();
return encontrado;
}

//Hash.h

#ifndef HASH_H_
#define HASH_H_

#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
#include <list>

using namespace std;

class ERROR_DE_RANGO{};
typedef struct{
unsigned datos[5];
}TCubeta;
class FicheroDisperso{

unsigned tamCubeta;
unsigned tamTabla;
TCubeta Cubeta;


void leerCubeta(ifstream &is, TCubeta &c){
  is.read (&c,sizeof(TCubeta));}
void escribirCubeta(ofstream &os, const TCubeta &c){
  os.write(&c, sizeof(TCubeta));

  }

public:
FicheroDisperso();
void crear(unsigned &tamTab, unsigned &tamCub);
bool insertar(unsigned &dato);
bool borrar(unsigned &clave);
bool buscar(unsigned &clave, unsigned &dato);
void cerrar();

};
#endif
 




 *
 *
 *
 * /